using System;

namespace Atomic.Vasp
{
	[Serializable]
	public class VaspOutput
	{
		internal VaspOutput()
		{
			PrintConsole = true;
			Compression = false;
			OverwriteMode = VaspOutputOverwriteMode.None;

			// Overrides default VASP setting here. Unset to restore VASP default behavior.
			WaveFunctions = false;
			ChargeDensity = false;

			ChargeDensityIgnore = false;
		}

		/// <summary>
		/// Print VASP console output.
		/// </summary>
		public bool PrintConsole
		{
			get;
			set;
		}

		/// <summary>
		/// Writes CHG and CHGCAR files containing the charge density function (LCHARG tag).
		/// http://cms.mpi.univie.ac.at/vasp/guide/node63.html
		/// http://cms.mpi.univie.ac.at/vasp/vasp/CHGCAR_file.html
		/// <summary>
		public bool? ChargeDensity
		{
			get;
			set;
		}

		/// <summary>
		/// Ignores the CHGCAR when parsing output files. This is indicated by creating a CHGCAR.ignore file.
		/// <summary>
		public bool ChargeDensityIgnore
		{
			get;
			set;
		}

		/// <summary>
		/// Writes WAVECAR file for easy continuation of a problem (LWAVE tag).
		/// http://cms.mpi.univie.ac.at/vasp/guide/node64.html
		/// </summary>
		public bool? WaveFunctions
		{
			get;
			set;
		}

		/// <summary>
		/// Compresses large text output files (OUTCAR etc.).
		/// </summary>
		public bool Compression
		{
			get;
			set;
		}

		/// <summary>
		/// Specifies if overwriting or keeping existing files should be allowed. Convenient to manually tweak some input files in large jobs (e.g. some options in INCAR).
		/// </summary>
		public VaspOutputOverwriteMode OverwriteMode
		{
			get;
			set;
		}
	}
}
